home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-12-28 | 38.7 KB | 1,074 lines |
- Path: xanth!nic.MR.NET!csd4.milw.wisc.edu!mailrus!ulowell!page
- From: page@swan.ulowell.edu (Bob Page)
- Newsgroups: comp.sources.amiga
- Subject: v02i100: qcat - quick disk catalog
- Message-ID: <10929@swan.ulowell.edu>
- Date: 28 Dec 88 17:18:58 GMT
- Organization: University of Lowell, Computer Science Dept.
- Lines: 1063
- Approved: page@swan.ulowell.edu
-
- Submitted-by: elbaum%REED.BITNET@CUNYVM.CUNY.EDU (Daniel Elbaum)
- Posting-number: Volume 2, Issue 100
- Archive-name: dos/qcat.1
-
- Qcat prints out the full pathname of each file in a series of disks or
- a list of directories. It's small and speedy, just perfect for 90% of
- what one wants from a disk catalogger, but with none of the bells and
- whistles which, I find, sometimes get in the way.
-
- [uuencoded executable included. ..Bob]
-
- # This is a shell archive.
- # Remove everything above and including the cut line.
- # Then run the rest of the file through sh.
- #----cut here-----cut here-----cut here-----cut here----#
- #!/bin/sh
- # shar: Shell Archiver
- # Run the following text with /bin/sh to create:
- # qcat.c
- # qcat.doc
- # qcat.uu
- # This archive created: Wed Dec 28 12:15:22 1988
- cat << \SHAR_EOF > qcat.c
-
- /***********************************************************************
-
- 11/88
-
- QCAT v0.01 -- List files on disks or in directories
-
- -----------------
-
- Copyright (C) 1988 by Daniel Elbaum
-
- This software is freely redistributable provided that:
- the three files which comprise it (qcat, qcat.c, qcat.doc)
- remain intact; all copyright notices contained in any of
- the aforementioned files remain intact; and no fee beyond
- reasonable remuneration for collation and distribution be
- charged for use and/or purveyance.
-
- ***********************************************************************/
-
- #include <stdio.h>
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <libraries/dos.h>
- #include <libraries/dosextens.h>
- #include <intuition/intuition.h>
-
- /* Error descriptor codes */
-
- #define E_NOLOCK (-1)
- #define E_NOMEM (-2)
- #define E_NOEXAM (-3)
- #define E_USAGE (-4)
- #define E_OUTPUT (-5)
- #define E_LIBRARY (-6)
- #define E_NONODE (-100)
- #define E_NOSTRING (-101)
-
- /* Manifest constants */
-
- #define NAMSIZ (108)
- #define MEMFLOOR (64000L) /* least amt of mem to leave */
-
- #define IREV (1)
- #define INAM ("intuition.library")
-
- /* Global data, type and function declarations */
- typedef struct IntuitionBase* ib_t;
-
- ib_t IntuitionBase=NULL;
- void *OpenLibrary();
-
- FILE *ofp;
-
- struct {
- char filenam[NAMSIZ*10];
- } fs;
-
- struct namlist {
- char *nam;
- struct namlist *next;
- } nlist;
-
- /*
- Acts like a state machine, the state of which
- is determined by the combination of arguments
- supplied. The while loop sets the state, while
- the if switches select action taken according
- thereto.
- */
-
- main(c, v)
- char **v;
- {
- register active;
- register err;
- char *cdrive=NULL;
- char *onam=NULL;
- char bu[NAMSIZ*10];
- char *getcd();
- char *realnam();
- void getrspinit(), freelist();
-
-
- ++v;
- while (**v == '-'){
- switch(*++*v){
- case 'o': /* specify output file */
- if (!*++v) {prerr(NULL, E_USAGE); exit(10);}
- else {onam=*v; ++v;}
- break;
- case 'c': /* continuous listing of 1 drive */
- if (!*++v) {prerr(NULL, E_USAGE); exit(10);}
- else {cdrive=*v; ++v;}
- if (!(IntuitionBase=(ib_t)OpenLibrary(INAM, IREV))){
- prerr(NULL, E_LIBRARY); exit(10);
- }
- break;
- default:
- prerr(NULL, E_USAGE);
- exit(10);
- }
- }
-
- if (onam){
- if (!(ofp=fopen(onam, "w"))){
- prerr(onam, E_OUTPUT);
- exit(10);
- }
- }
- else ofp=stdout;
-
- if (cdrive){
- getrspinit();
- if (getresponse()!=FALSE){
- for (active=1; active; ){
- realnam(cdrive, fs.filenam); /* seed pathname */
- if (err=getnams(cdrive)) prerr(cdrive, err);
- if (getresponse()==FALSE) active=0;
- }
- }
- }
- else if (!*v){
- getcd(bu);
- strcpy(fs.filenam, bu);
- if (err=getnams(bu)) prerr(bu, err);
- }
- else{
- for (; *v; ++v){
- realnam(*v, fs.filenam); /* seed pathname */
- if (err=getnams(*v)) prerr(*v, err);
- }
- }
- prlist(ofp, &nlist);
- freelist(&nlist);
- if (ofp!=stdout) fclose(ofp);
- if (IntuitionBase) CloseLibrary(IntuitionBase);
- exit(0);
- }
-
- /*
- If nam is the name of a file, add its size to the global counter.
- If nam is the name of a directory, saunter down a level and
- grab info for its files.
- Return a coded description of any error which occurs, or zero
- if success was the order of the day.
- */
-
- getnams(nam)
- char *nam;
- {
- register struct FileLock *l=NULL;
- register struct FileInfoBlock *f=NULL;
- register err=0;
- struct FileLock *Lock();
- void addtonam(), truncnam();
-
- if (!nam) return(E_NOEXAM);
- if (!(l=Lock(nam, ACCESS_READ))){
- return(E_NOLOCK);
- }
- if (!(f=(struct FileInfoBlock *)AllocMem((ULONG)sizeof(*f), MEMF_PUBLIC))) {
- UnLock(l);
- return(E_NOMEM);
- }
- if (!Examine(l, f)) {
- UnLock(l);
- FreeMem(f, (ULONG)sizeof(*f));
- return(E_NOEXAM);
- }
- if (f->fib_DirEntryType<0){ /* file */
- addnam(nam, &nlist);
- }
- else {
- while (ExNext(l, f)){ /* directory */
- addtonam(fs.filenam, f->fib_FileName);
- if (err=getnams(fs.filenam)) break;
- truncnam(fs.filenam); /* delete filename from path */
- }
- }
- UnLock(l);
- FreeMem(f, (ULONG)sizeof(*f));
- return(err);
- }
-
- /*
- Assuming p points to a valid pathname and s to a valid filename,
- append the filename to the pathname.
- */
-
- void
- addtonam(p, s)
- register char *p, *s;
- {
- register char *op=p;
-
- while (*p)
- p++;
- if (p!=op){
- if (*--p!=':')
- *++p='/';
- p++;
- }
- while (*s)
- *p++=*s++;
- *p='\0';
- }
-
- /*
- Assuming p points to a valid pathname, clip the filename from it.
- */
-
- void
- truncnam(p)
- register char *p;
- {
- register char *pp;
-
- if (!p) return;
- for (pp=p; *pp; pp++)
- ;
- while (*pp!='/'&&*pp!=':'&&pp>p)
- --pp;
- if (*pp==':') ++pp;
- *pp='\0';
- }
-
- /*
- Build a real pathname from the filename,
- dirname, or drivename specifiecd in nam
- into bu. Return a pointer to bu on success,
- or NULL if the chore is beyond doing.
- */
-
- char *
- realnam(nam, bu)
- char *nam, *bu;
- {
- register addcol;
- register struct FileLock *l=NULL;
- struct FileLock *Lock();
-
- if (!nam||!bu) return(NULL);
- if (nam[strlen(nam)-1]==':') addcol=1;
- else addcol=0;
- if (!(l=Lock(nam, ACCESS_READ))){
- return(NULL);
- }
- fullnam(l, bu);
- UnLock(l);
- return(bu);
- }
-
-
- /*
- Put the full name of the current
- directory into the supplied buffer
- and return a pointer to it.
- */
-
- char *
- getcd(bu)
- char *bu;
- {
- struct FileLock *ol;
-
- if (!bu) return(NULL);
- fullnam(ol=CurrentDir(0L), bu);
- CurrentDir(ol);
- return(bu);
- }
-
- /*
- Put the full pathname of a
- locked file in the given buffer
- and return a pointer to it.
- */
-
- char *
- fullnam(l, bu)
- register struct FileLock *l;
- char *bu;
- {
- register len;
- struct FileLock *nl, *ParentDir();
- char bu2[NAMSIZ];
- char ebu[NAMSIZ*10];
-
- if (!l||!bu) return(NULL);
- bu2[0]=0;
- locknam(l, bu);
- while (l=ParentDir(l)){
- if (locknam(l, bu2)){
- sprintf(ebu, "%s/%s", bu2, bu);
- strcpy(bu, ebu);
- }
- else break;
- }
- if (bu2[0]) bu[strlen(bu2)]=':';
- else {bu[len=strlen(bu)]=':'; bu[len+1]='\0';}
- return(bu);
- }
-
- /*
- Put the name of the file or directory
- associated with the given lock into
- the given buffer and return a pointer
- to it or NULL if it couldn't be done.
- */
-
- char *
- locknam(l, bu)
- register struct FileLock *l;
- char *bu;
- {
- register struct FileInfoBlock *f=NULL;
-
- if (!l||!bu) return(NULL);
- if (!(f=(struct FileInfoBlock *)AllocMem((ULONG)sizeof(*f), MEMF_PUBLIC))) {
- return(NULL);
- }
- if (!Examine(l, f)) {
- FreeMem(f, (ULONG)sizeof(*f));
- return(NULL);
- }
- strcpy(bu, f->fib_FileName);
- FreeMem(f, (ULONG)sizeof(*f));
- return(bu);
- }
-
- /*
- Add a name to the end of the filename list.
- Could be more efficient, but the bottleneck
- is disk speed. Return a descriptive error
- value on failure.
- */
-
- addnam(s, lp)
- char *s;
- struct namlist *lp;
- {
- struct namlist *newnode();
- char *strsave();
- void freelist(), prlist();
-
- if (!s||!lp) return(-1);
- if (amtfree()<MEMFLOOR){ /* dump if mem full */
- prlist(ofp, lp);
- freelist(lp);
- }
- while (lp->next)
- lp=lp->next;
- if (!(lp->next=newnode()))
- return(E_NONODE); /* won't happen. Better not. */
- if (!(lp->next->nam=strsave(s)))
- return(E_NOSTRING);
- return(0);
- }
-
- /*
- Allocate a new node for the filename list.
- Return a pointer to it or NULL if there's
- not enough memory.
- */
-
- struct namlist *
- newnode()
- {
- register struct namlist *mp;
-
- if (mp=(struct namlist *)malloc(sizeof(struct namlist))){
- mp->nam=NULL;
- mp->next=NULL;
- }
- return(mp);
- }
-
- /*
- Free the filename list.
- */
-
- void
- freelist(lp)
- struct namlist *lp;
- {
- struct namlist *p;
-
- if (!lp) return;
- lp=lp->next; /* don't free 1st item */
- while (lp){
- p=lp->next;
- free(lp->nam);
- free(lp);
- lp=p;
- }
- }
-
- /*
- Print out the filename list.
- */
-
- void
- prlist(fp, lp)
- FILE *fp;
- struct namlist *lp;
- {
- if (!lp||!fp) return;
- lp=lp->next; /* don't print 1st item */
- while (lp){
- fprintf(fp, "%s\n", lp->nam);
- lp=lp->next;
- }
- }
-
- /*
- An old favorite.
- */
-
- char *
- strsave(s)
- char *s;
- {
- register len;
- register char *mp;
-
- if (!s) return(NULL);
- if (mp=malloc(len=strlen(s)+1))
- memcpy(mp, s, len);
- return(mp);
- }
-
- /*
- Report amount of free memory in the system.
- Errors not allowed here.
- */
-
- ULONG
- amtfree()
- {
- ULONG c, f;
-
- Forbid();
- c=AvailMem(MEMF_CHIP);
- f=AvailMem(MEMF_FAST);
- Permit();
- return(c+f);
- }
-
- /*
- Print a message corresponding to the error given,
- prompting with s, if nonnull.
- Return the error given.
- */
-
- prerr(s, err)
- char *s;
- {
- register char *errp;
-
- switch (err){
- case E_NOMEM:
- errp="Out of memory"; break;
- case E_NOEXAM:
- errp="Couldn't examine"; break;
- case E_NOLOCK:
- errp="File not found"; break;
- case E_OUTPUT:
- errp="Can't open output file"; break;
- case E_USAGE:
- errp="Usage: qcat [-o outputfile] [-c drivename] or \n\
- qcat [-o outputfile] dirname";
- break;
- case E_LIBRARY:
- errp="Couldn't open intuition.library";
- break;
- default: /* NOTREACHED */
- errp="grievous error"; break;
- }
- if (s) printf("%s: %s\n", s, errp);
- else printf("%s\n", errp);
- return(err);
- }
-
- /*
- Set up the AutoRequest stuff, and use the
- automatic requestor to tell the user when
- to change disks, let them quit, and return
- when they do so.
- */
-
- char *rsp_bod0="Insert a disk";
- char *rsp_bod1="Next disk";
- char *rsp_no="Quit";
- char *rsp_yes="Redo";
-
- struct response {
- struct IntuiText bod;
- struct IntuiText no;
- ULONG yflg;
- struct Window *w;
- } rsp;
-
- /*
- Initialize the autorequestor's data and
- find a window to put it in. Return nonzero
- on failure, zero on success.
- */
-
- getrspinit()
- {
- rsp.bod.FrontPen=0;
- rsp.bod.BackPen=1;
- rsp.bod.DrawMode=JAM1;
- rsp.bod.LeftEdge=6;
- rsp.bod.TopEdge=3;
- rsp.bod.ITextFont=NULL;
- rsp.bod.IText=rsp_bod0;
- rsp.bod.NextText=NULL;
-
- rsp.no=rsp.bod;
- rsp.no.IText=rsp_no;
-
- rsp.yflg=DISKINSERTED;
-
- return(!(rsp.w=getCLIwin()));
- }
-
- /*
- Return a pointer to a window for
- the requestor. If there be none,
- return NULL.
- */
-
- struct Window *
- getCLIwin()
- {
- register struct Screen *sp;
- register struct Window *wp;
-
- return(IntuitionBase->ActiveWindow);
- }
-
- /*
- Post a requestor asking for a new
- disk. The first time called, just
- ask for the first disk; after that,
- ask for the next. Return the boolean
- value of the user's response.
- */
-
- getresponse()
- {
- register rv=0;
-
- rv=AutoRequest(rsp.w, &rsp.bod, NULL, &rsp.no, rsp.yflg, 0L, 200, 50);
- rsp.bod.IText=rsp_bod1;
- return(rv);
- }
-
-
- SHAR_EOF
- cat << \SHAR_EOF > qcat.doc
-
- 11/88
-
-
- QCAT v0.01 -- List files on disks or in directories
-
-
- -----------------
-
- Copyright (C) 1988 by Daniel Elbaum
-
- This software is freely redistributable provided that:
- the three files which comprise it (qcat, qcat.c, qcat.doc)
- remain intact; all copyright notices contained in any of
- the aforementioned files remain intact; and no fee beyond
- reasonable remuneration for collation and distribution be
- charged for use and/or purveyance.
-
- -----------------
-
- Syntax:
- qcat [-o filename] [dirname ...]
- or
- qcat [-o filename] -c drive
-
-
- Qcat simply produces a listing of the full pathname of all
- files in a list of directories or in a series of disks.
-
- With no arguments, a list is produced of the files in the
- current directory and all its sub directories.
-
- -o redirects the list to a file of the specified name, wiping
- out any file of that name which may already exist.
-
- -c causes a continuous listing of a single drive. A requestor
- comes up prompting for a disk to be inserted; the names of the
- files on that disk are read, and the requestor comes back asking
- for the next disk. When all the disks you want to catalog have
- been fed in, click on the 'Quit' gadget, and the complete file
- list will be output.
-
- Instead of -c and a drive name, a bunch of directory names can
- be given on the command line. A single list will be output of
- all the files in all the specified directories and their sub-
- directories.
-
- Nota Bene:
-
- The list won't be sorted. There are plenty of utilities out
- there which sort files by line, so I didn't want to bloat
- this program with the extra functionality. If enough people
- want a sorting option, I'll add one.
-
- If the directory trees to be listed are deep (lots of sub-
- directories), the be sure to set the stack size to something
- like 10000 or so, since the recursive routine that does the
- spelunking is pretty stack-hungry.
-
- The purpose of qcat is to list disks or directories, given a
- simple command line, without involving the user in an interactive
- experience. One good use for it is to make a listing for a set
- of disks, then use the list to find out where particular files
- are located. Should come in handy for those Fish disks, eh?
-
- The way it works is to keep a linked list of filenames in memory
- until all disks or directories have been read, and then to dump
- the list. If memory gets low, the list will be dumped several
- times during the reading, so even if you have lots of disks to
- look at or not much memory or both, qcat should function smoothly.
-
-
- If you want to send me money for qcat, then by all means
- do so--many projects are in progress and I need financing.
- $5.00 is recommended. Make checks payable to:
-
- Daniel Elbaum
- Amaranth Software
- 4816 SE Bybee Blvd.
- Portland, Ore. 97206
-
-
- Send comments, suggestions, and flames to:
-
- Daniel Elbaum
- Portland bbs: Amigaboard!, NAG, HABIT
- UUCP: ...!tektronix!reed!elbaum
- ARPA: elbaum@reed.EDU
-
-
-
-
-
- SHAR_EOF
- cat << \SHAR_EOF > qcat.uu
-
- begin 644 qcat
- M```#\P`````````&``````````4````"```#8P``"CP```!&````)`````T`F
- M``/I`````D[Y```````````#[`````$````"`````@````````/R```#Z@``+
- M`V,`(0`!``````````````````````````#_________________________U
- M______\`````````````````````````````````````````````````````[
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M````````````````````````#(8```Q\```,=@``#'``````````````````8
- M`````````````````````````````````````````````````!Z"````````@
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M````````````````````````````;6%T:&EE965D;W5B8F%S+FQI8G)A<GD`%
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M`````````````````````````````````````````````````````````````
- M``````````/L````!0````(```9(```&"```!@P```80```&%`````````/R)
- M```#Z0``"CPCSP```#`CP````#@CR````#PL>0````0CS@````23R4ZN_MHH,
- M0$JL`*QG``$(80`",I'(("P`K.6((#`($.6(2.<`,$7Y````P$?Y````0"!`W
- M<``0&$(P"``FR"`Y````."!Y````/$/P"``,(0`@4LC_^D(I``$2&&=<#`$`G
- M(&?V#`$`"6?P)LH,`0`B9Q04P1(89T(,`0`@9P04P6#R0AI@U!(89S`,`0`BK
- M9_(,`0`J9B`2&`P!`$YG!@P!`&YF!'(*8`X,`0!%9P8,`0!E9@)R&Q3!8,Q"`
- M$D*3(#P````\D(M&@.2(3-\,`$AY````0"\`3KD```!,(\`````8(\`````D(
- M3KD```!<(\`````<(\`````@(\`````H(\`````L3KD``"&`<``N>0```#!.\
- M=6$``2QA``$6(\`````T+P!"IR1`("H`)&<0+'D````(($`B*```3J[_@D'Y!
- M```*]`P0``!G4"(()#P```/M+'D````(3J[_X@R``````&=$(\`````8(\``J
- M```<(\`````@(\`````D(\`````H(\`````L*4``G"E``*#EB"!`*6@`"`"D8
- M3KD``"&`<`!@!"`O``1*N0```#1G$B(Y````&&L*+'D````(3J[_W"YY````2
- M,"\`+'D````$(#D````(9P8B0$ZN_F(@.0````QG!B)`3J[^8B`Y````$&<&Z
- M(D!.KOYB2KD````T9PY.KO]\(GD````T3J[^AB`?3G5(YP$&+CP``X`'+'@``
- M!$ZN_Y1,WV"`<&1@`/]Z0>P`7$ZN_H!![`!<3J[^C$YU0_H`$G``3J[]V"/`3
- M````"&?`3G5D;W,N;&EB<F%R>0!.<4Y6^[A(YQ\\)BX`#$7Y```*P$?Y```A$
- M_DGY```!Q$OY```$_'H`?`!8@R!#(%`0$`P``"UF``#*($-2D"!0$!!(@$C`;
- M3KD``"><```"Y@```&\```,0````8P````````-N6(,@0R`09@``&$AX__Q"Q
- MITZ24$](>``*3I-83V````@@0RP06(-@``!R6(,@0R`09@``&$AX__Q"ITZ2<
- M4$](>``*3I-83V````@@0RH06(-(>``!2'D```UP3KD```!X4$\CP````<`@R
- M.0```<!F```42'C_^D*G3I)03TAX``I.DUA/8```%$AX__Q"ITZ24$](>``*(
- M3I-83V``_RQ*AF<``#!(>0``#6XO!DZY```.!%!/*(`@%&8``!1(>/_[+P9.V
- MDE!/2'@`"DZ36$]@```20?D```L((`@&@````"`H@$J%9P``5$ZY```+G$ZYW
- M```,(DJ`9P``/GX!2H=G```V2'D```'(+P5.N0``!L103R\%3I583R@`9P``%
- M"B\$+P5.DE!/3KD```PB2H!F```$?@!@QF```'H@0R`09@``/$AN^[A.N0``\
- M!T183TAN^[A(>0```<A.N0``)(A03TAN^[A.E5A/*`!G```,+P1(;ONX3I)01
- M3V```#@@0R`09P``,$AY```!R"!#+Q!.N0``!L103R!#+Q!.E5A/*`!G```,T
- M+P0@0R\03I)03UB#8,I(>0``!@`O%$ZY```)Z%!/2'D```8`3KD```FB6$\@Z
- M%$'Y```+""((!H$````@L(%G```,+Q1.N0``#8183R`Y```!P&<``!`O.0``1
- M`<!.N0```&183T*G3I-83TS?//A.7DYU3E;_]$CG'B`J+@`(1?D```"D>`!V&
- M`'P`2H5F```,</U,WP1X3EY.=4AX__XO!4ZY````B%!/*`!F```&</]@X$AXB
- M``%(>`$$3KD````@4$\F`&8```PO!$Z26$]P_F#`+P,O!$ZY````N%!/2H!F?
- M```:+P1.DEA/2'@!!"\#3KD````X4$]P_6"6($,@*``$;```%DAY```&`"\%X
- M3KD```C@4$]@``!0+P,O!$ZY````U%!/2H!G```^(`-0@"\`2'D```'(3KD`_
- M``8,4$](>0```<A.N0``!/Q83RP`9P``!F```!)(>0```<A.N0``!FA83V"RL
- M+P1.DEA/2'@!!"\#3KD````X4$\@!F``_Q).5O_\2.<<`"8N``@H+@`,*@,@;
- M0Q`09P``!E*#8/2VA6<``!I3@R!#$!`,```Z9P``"E*#($,0O``O4H,@1!`01
- M9P``#B!$4H0B0U*#$I!@["!#0A!,WP`X3EY.=4Y6__Q(YQ@`*"X`"&8```I,>
- MWP`83EY.=28$($,0$&<```92@V#T($,0$`P``"]G```8($,0$`P``#IG```,B
- MMH1O```&4X-@WB!#$!`,```Z9@``!%*#($-"$&"T3E;_^$CG'@`F+@`(*BX`P
- M#'@`2H-G```(2H5F```,<`!,WP!X3EY.=2!#+P@O`TZY```DG%A/4X`@7]'`@
- M$!`,```Z9@``"'P!8```!'P`2'C__B\#3KD```"(4$\H`&8```9P`&"Z+P4O/
- M!$ZY```'A%!/+P1.N0```*183R`%8*!.5O_\2.<8`"8N``AF```,<`!,WP`8&
- M3EY.=2\#0J=.N0```/!83R@`+P1.N0``!X103R\$3KD```#P6$\@`V#23E;[Y
- M5$CG'``F+@`,*"X`"&<```A*@V8```QP`$S?`#A.7DYU0B[_C"\#+P1.N0``T
- M"%A03R\$3KD```$$6$\H`&<``$A(;O^,+P1.N0``"%A03TJ`9P``+B\#2&[_\
- MC$AY```-:$AN^U1.N0``'/;>_``02&[[5"\#3KD``"2(4$]@```&8```!&"JG
- M$"[_C&<``!X@0R\(2&[_C$ZY```DG%A/(%_1P!"\`#I@```B($,O""\#3KD`"
- M`"2<6$\J`"!?T<40O``Z($/1Q4(H``$@`V``_TI.5O_\2.<<`"@N``PJ+@`((
- M=@!*A6<```A*A&8```QP`$S?`#A.7DYU2'@``4AX`01.N0```"!03R8`9@``.
- M!G``8-XO`R\%3KD```"X4$]*@&8``!1(>`$$+P-.N0```#A03W``8+H@`U"`.
- M+P`O!$ZY```DB%!/2'@!!"\#3KD````X4$\@!&"83E8``$CG&``F+@`,*"X`&
- M"&<```A*@V8```QP_TS?`!A.7DYU3KD```J$#(```/H`;```'"\#+SD```'$9
- M3KD```GH4$\O`TZY```)HEA/($,@*``$9P``"B!#)B@`!N3KD```EX($,A1
- M0``$("@`!&8```9PG&"D+P1.N0``"CA83R!#(&@`!""`(!!F```&<)M@B'``]
- M8(1.5O_\+P-(>``(3KD```_\6$\F`&<```P@0T*0($-"J``$(`,F'TY>3G5.Z
- M5O_\2.<8`"8N``AF```*3-\`&$Y>3G4@0R8H``1*@V<``"(@0R@H``0@0R\0Z
- M3KD``">P6$\O`TZY```GL%A/)@1@VF#*3E8``$CG&``F+@`,*"X`"$J#9P``G
- M"$J$9@``"DS?`!A.7DYU($,F*``$2H-G```@($,O$$AY```-9"\$3KD``!T<(
- MWOP`#"!#)B@`!<8,Q.5O_X2.<<`"@N``AF```,<`!,WP`X3EY.=2\$3KD`U
- M`"2<6$]2@"H`+P5.N0``#_Q83R8`9P``$B\%+P0O`TZY```H=-[\``P@`V#&:
- M3E;_^$CG&`!.N0````!(>``"3KD```!06$\H`$AX``1.N0```%!83R8`3KD``
- M```0(`30@TS?`!A.7DYU3E;__$CG'``H+@`(*BX`#"`%#(#____Z;0``@%R`6
- M#(`````%;@``=.6`0?D```KV(G`(`$[1```+3@``"S8```M"```+'@``"Q(`X
- M``LJ`````$'Y```-5B8(8```1D'Y```-1"8(8```.D'Y```--"8(8```+D'YJ
- M```-'"8(8```(D'Y```,T"8(8```%D'Y```,L"8(8```"D'Y```,H"8(2H1GJ
- M```:+P,O!$AY```,F$ZY```=9-[\``Q@```2+P-(>0``#)1.N0``'6103R`%C
- M3-\`.$Y>3G5.<4Y6```O"D7Y```&&$(2%7P``0`!0BH``C5\``8`!#5\``,`.
- M!D*J``@E>0``!@@`#$*J`!!(4D/J`!0@7W`%(MA1R/_\)7D```80`"`E?````
- M@```*$ZY```,$"5``"P@*@`L9@``"'`!8```!$*`)%].7DYU3E;_^"!Y```!^
- MP"`H`#1.7DYU3E;__$CG$"!%^0``!AAV`$AX`#)(>`#(0J<O*@`H(`H&@```/
- M`!0O`$*G+PHO*@`L3KD`````WOP`("8`)7D```8,``P@`TS?!`A.7DYU4F5DQ
- M;P``475I=```3F5X="!D:7-K`$EN<V5R="!A(&1I<VL`)7,*`"5S.B`E<PH`S
- M9W)I979O=7,@97)R;W(``$-O=6QD;B=T(&]P96X@:6YT=6ET:6]N+FQI8G)A+
- M<GD`57-A9V4Z('%C870@6RUO(&]U='!U=&9I;&5=(%LM8R!D<FEV96YA;65=+
- M(&]R(`IQ8V%T(%LM;R!O=71P=71F:6QE72!D:7)N86UE`$-A;B=T(&]P96X@8
- M;W5T<'5T(&9I;&4``$9I;&4@;F]T(&9O=6YD``!#;W5L9&XG="!E>&%M:6YEE
- M``!/=70@;V8@;65M;W)Y`"5S"@`E<R\E<P!W`&EN='5I=&EO;BYL:6)R87)YD
- M`$YQ3E8``"\#)BX`"&<``'(,@P``"PAG```J0?D```L((`@&@````""V@&<`U
- M`!9!^0``"P@@"`:`````0+:`9@``""8?3EY.=2\#3KD``"5(6$\@0R\03KD`?
- M```<6$\@0R\H``P@0R\H`!I.N0```#A03TAX`"`O`TZY```E+%!/8,!.5O_LS
- M2.<?,"1N``PF;@`(+#P```$`>``,A@````%L```$?`%V`'H`#(4````4;```:
- M,D'Y```+""`((@7K@="!($`@*``:9@``%D'Y```+""`((@7K@="!)@!@```&N
- M4H5@QDJ#9P`!`A`2#```<F8``!HN/````^T0*@`!#```*V8```@N/````^T0X
- M$@P``'=F```Z+CP```/N$"H``0P``"MF```H2'@#[2\+3KD`````4$\H`&<`O
- M`!1(>``!0J<O!$ZY````;-[\``Q*A&8``!`O!R\+3KD`````4$\H`$J$9P``!
- M;"!#((0@0R%&``P@0T)H`!X@0T*H``@@0T*H``1"IR\&3KD````@4$\@0R%`"
- M`!H@*``:9P``)$*G0J<O!$ZY````;-[\``P@0R%``!0B0R-H`!0`$&```!`OP
- M!$ZY````'%A/8```!F```!I(>``@+P-.N0``)2Q03W``3-\,^$Y>3G4@`V#T\
- M3E;_\$CG'@!X_W8`#(,````4;```)"`N`!!!^0``"P@B""0#ZX+2@K"!9@``4
- M""@#8```!E*#8-0,A/____]G``!(+RX`#"\N``A.N0``#@103RP`+P9.N0``+
- M(W!83RH`2'@`@"\%+P1.N0``)+#>_``,0?D```L((`@B!.N!T(%,WP!X3EY.!
- M=7``8/1.5O_\2.<8($7Y```-B"@N``A"IR`$!H`````0+P!.N0```"!03R8`N
- M(!)G```((%(A0P`$($,@DB!#(4H`!"`$!H`````0($,A0``()(,@`P:`````X
- M#$S?!!A.7DYU3E;_^$CG&``O+@`,+RX`"$ZY```E]"`?6$\H`"\$3KD``")XT
- M6$\F`"\$+P-.N0``)2Q03R`#3-\`&$Y>3G5.5O_T2.<>`"@N``@O+@`,3KD`P
- M`")X6$\F`&<``#0@!`2`````$"P`($8@*``(!(`````0*@`O!2\#+P1.N0``Z
- M)&C>_``,+P1.N0``(]183R`#3-\`>$Y>3G5.<4Y6__1(YQ\`)BX`""HN``Q!D
- M^0``"DP@"`:`````?R@`($1"$`R#@````&8``%@@!4ZY```GG```$4H````(Y
- M```16@````H``!%D````$````````!%N0?D``!YV(`A,WP#X3EY.=4'Y```>9
- M:B`(8.Y!^0``'F`@"D0?D``!Y8(`A@VDJ#;```"'`!8```!$*`+@!G```(+
- M(`-$@"8`+P4O`TZY```G!B`?6$\L`"\%+P-.N0``)F8@'UA/)@`@>0``!DC1V
- MQE.$(D02D$J#;LY*AV<```I3A"!$$+P`+2`$8`#_?$Y6_\A(YQ\`*BX`$`R%5
- M````(&\```1Z!D'Y```>4$/N``@@*0``(BD`!$ZY```A+DJ`;```"'`!8```Q
- M!$*`+@!G```@0>X`""`H```B*``$3KD``"$>0>X`""%````A00`$0>X`""\H:
- M``0O*```3KD``!ZH4$]![O_8(4```"%!``1![O_80^X`""`I```B*0`$3KD`R
- M`"$&0>[_X"%````A00`$0?D```I,)@A\`+R%;```CD'Y```>2$/N_^`@*0``J
- M(BD`!$ZY```@OD'N_^`A0```(4$`!$'N_^`O*``$+R@``$ZY```>J%!/+P$@%
- M`"(?3KD``"%F*``&```P($-2@Q"`(`1.N0``(59![O_@+P$O`"`H```B*``$:
- M+5__R"U?_\Q![O_(3KD``"$&0>[_X"%````A00`$4H9@`/]P($-2@T(0<#]!$
- M^0``"DPB""0%1(+2@M"!)@!(>0``"DPO`TZY```DB%!/4X,@0Q"\`"Y!^0``[
- M'D!#[O_8("D``"(I``1.N0``(-8O`2\`3KD``!ZH4$]![O_0(4```"%!``1!,
- M^0``'CA#[O_0("D``"(I``1.N0``(+Y![O_8+P$O`"`H```B*``$+5__R"U?F
- M_\Q![O_(3KD``"$&+P$@`"(?3KD``"%F*``&```P4X,@0Q"`0>[_T$/N_]@C>
- M:``````C:``$``1!^0``'C!#[O_8("D``"(I``1.N0``(2Y*@&X`_TY*AV<`V
- M``I3@R!#$+P`+2`#3-\`^$Y>3G5.5O_(2.<?("XN`!`,AP```"!O```$?@9!A
- M^0``'BA#[@`(("D``"(I``1.N0``(2Y*@&P```AP`6````1"@"1`(`IG```@0
- M0>X`""`H```B*``$3KD``"$>0>X`""%````A00`$>`!!^0``'B!#[@`(("D`#
- M`"(I``1.N0``(2Y*@&<``(Y!^0``'AA#[@`(("D``"(I``1.N0``(2Y*@&T`R
- M`"I!^0``'A!#[@`(("D``"(I``1.N0``(-9![@`((4```"%!``12A&"Z0?D`(
- M`!X(0^X`""`I```B*0`$3KD``"$N2H!L```J0?D``!X`0^X`""`I```B*0`$6
- M3KD``""^0>X`""%````A00`$4X1@ND'N``@O*``$+R@``$ZY```>J%!/0>[_7
- MV"%````A00`$0>[_V$/N``@@*0``(BD`!$ZY```A!D'N_^`A0```(4$`!$'YS
- M```*3"8(>@"ZAVP``(Y!^0``'?A#[O_@("D``"(I``1.N0``(+Y![O_@(4``$
- M`"%!``1![O_@+R@`!"\H``!.N0``'JA03R\!(``B'TZY```A9BP`!@``,"!#V
- M4H,0@"`&3KD``"%60>[_X"\!+P`@*```(B@`!"U?_\@M7__,0>[_R$ZY```A4
- M!D'N_^`A0```(4$`!%*%8`#_<"!#4H,0O`!%2H1M```.($-2@Q"\`"M@```0R
- M($-2@Q"\`"T@!$2`*`!Z`DJ%;0``,DAX``HO!$ZY```G!B`?6$\L``8``#`@$
- M0]'%$(!(>``*+P1.N0``)F8H'UA/4X5@RB!#0B@``W`Y0?D```I,(@@D!T2"-
- MTH+0@28`2'D```I,+P-.N0``)(A03U.#($,0O``N0?D``!WP0^[_V"`I```B3
- M*0`$3KD``"#6+P$O`$ZY```>J%!/0>[_T"%````A00`$0?D``!WH0^[_T"`I"
- M```B*0`$3KD``""^0>[_V"\!+P`@*```(B@`!"U?_\@M7__,0>[_R$ZY```AW
- M!B\!(``B'TZY```A9BP`!@``,%.#($,0@$'N_]!#[O_8(V@`````(V@`!``$T
- M0?D``!W@0^[_V"`I```B*0`$3KD``"$N2H!N`/].(`IG```*4X,@0Q"\`"T@?
- M`TS?!/A.7DYU3E;_]$CG&``H+@`00?D``!W80^X`""`I```B*0`$3KD``"$NS
- M2H!L```80>X`""`H```B*``$3KD``"$>8```#D'N``@@*```(B@`!$'N__0A?
- M0```(4$`!$'Y```=T$/N__0@*0``(BD`!$ZY```A+DJ`;@``($'Y```=R$/N'
- M__0@*0``(BD`!$ZY```A+DJ`;```(B\$0>X`""\H``0O*```3KD``!06WOP`@
- M#$S?`!A.7DYU+P1![@`(+R@`!"\H``!.N0``$=C>_``,)@`O`TAY```*3$ZYF
- M```DB%!/2H1O```L0?D```I,)@@@0Q`09P``!E*#8/13@R!#$!`,```P9@``&
- M"B!#4X-"$L0?D```I,(`A@E$Y6__A(YQP`*BX`"'@`0?D```I,)@A!^0``#
- M"DPF""!%$!!G```0($52A2)#4H,2D%*$8.JXK@`,;```$"`N`!`@0U*#$(!2>
- MAJ($-"$$'Y```*3"`(3-\`.$Y>3G5.5O_X2.<<`"@N``@O!$ZY```DG%A/R
- M*@!!^0``"DPF""`%4H6PK@`,;```#B`N`!`@0U*#$(!@Z"\$+P-.N0``)(A0>
- M3T'Y```*3"`(3-\`.$Y>3G5.5@``2.<<`"8N``@H+@`,*BX`$$J$;P``&"\%W
- M+P0O`TZY```8V-[\``PF`&```!Y*A&P``!@O!2`$1(`O`"\#3KD``!AZWOP`H
- M#"8`(`-,WP`X3EY.=4Y6_]9(YQ\\)FX`$$OY```0]"@N``PF+@`(($,0$&<`^
- M`TH@0Q`02(!(P$ZY```GG```&<(````E````````'-Y2@S1\```L/```!``@U
- M0Q`0#```+68```AP`6````1"@"U`__0@+O_T9P``!%*#($,0$$B`2,`H0"`,I
- M#(`````P9P``!CA\`"`@0Q`0#```*F8```Y2@R!$)%!8A&```#H@0Q`0#```<
- M,&T``"X@0Q`0#```.6X``"(@"M"`(@#E@="!($,2$$B!2,'0@02`````,"1`V
- M4H-@R"`N__1G```((`I$@"1`($,0$`P``"YF``!64H,@0Q`0#```*F8```Y2,
- M@R!$+!!8A&```#Q\`"!#$!`,```P;0``+B!#$!`,```Y;@``(B`&T(`B`.6!'
- MT($@0Q(02(%(P="!!(`````P+`!2@V#(($,0$$B`2,!.N0``)YP``!L^````,
- M)0``&U8```!C```;<@```&0``!N&````90``&ZH```!F```;S@```&<``!ORX
- M````;```&_@```!O```<#````',``!PD````=0``'#@```!X```<@@```%@``
- M```````<EAU\`"7_UD'N_]9"*``!0>[_UBH(8``!2B!$(!`=0/_60>[_UD(H)
- M``%![O_6*@A8A&```2Y(>``*($0O$$Z54$\J`%B$8``!&B\&($0O*``$+R@`=
- M`$ZY```4%M[\``PJ`%"$+#P```0`8```]B\&($0O*``$+R@``$ZY```1V-[\L
- M``PJ`%"$+#P```0`8```TB\&($0O*``$+R@``$ZY```78M[\``PJ`%"$+#P`_
- M``0`8```KE*#8`#^TDAX``@@1"\03I503RH`6(1@``"4($0J$%B$2H5F```*W
- M0?D``!W`*@A@``!\2'@`"B!$+Q!.E5!/*@!8A&```&A(>``0($0O$$Z54$\J!
- M`"X%($<0$&<``"X@1Q`0#```06T``!X@1Q`0#```6FX``!(@1Q`02(!(P`8`X
- M`"`@1Q"`4H=@S%B$8```'DAX`!`@1"\03I503RH`6(1@```*0?D``!VX*@@O+
- M!4ZY```DG%A/L(9O```(($71QD(0+PPO"B\%3KD``!DLWOP`#"H`($40$&<`>
- M``X@15*%(DM22Q*08.Q@```*($,B2U)+$I!2@V``_+)"$TS?//A.7DYU3E8`E
- M`"\#)BX`""\#2&X`$"\N``Q.N0``&8+>_``,(`,F'TY>3G5.5O_\+P-!^0``9
- M!DPF""\#2&X`$"\N``Q.N0``&8+>_``,+RX`""\#3KD``"2<6$\O`$AX``$O-
- M`TZY```?@-[\`!`F'TY>3G5.5O_\+P-!^0``!DPF""\#2&X`#"\N``A.N0``R
- M&8+>_``,0?D```L((`@&@````"`O`"\#3KD``"2<6$\O`$AX``$O`TZY```?S
- M@-[\`!`F'TY>3G4M3T]04RT``"AN=6QL*0``.\><H0R20BM$%:\=>+6,0```M
- M``````````````````!`)````````$`D````````0"0```````!`)```````0
- M`#_P````````0"0```````!`)```````````````````````````````````W
- M`````$`D````````0"0```````!`)```````````````````+4]/4%,M```X_
- M,#`P,#`P,```+3(Q-#<T.#,V-#@`,C`P,#`P,#`P,#``,#$R,S0U-C<X.4%"N
- M0T1%1D=(24I+3$U.3U!14E-455976%E:``!.5O_\0>X`""`H```B*``$3KD`/
- M`"%F+4#__"`N__Q.N0``(59.7DYU3E;_^$'N``@O*``$+R@``$ZY```>J%!/5
- M0>[_^"%````A00`$0>[_^$/N``@@*0``(BD`!$ZY```A+DJ`;```'D'Y```?G
- M=D/N__@@*0``(BD`!$ZY```@[DY>3G5![O_X("@``"(H``1@[F#L3E8``$'YN
- M```?;D/N``@@*0``(BD`!$ZY```@[B\!+P!.N0``'JA03TZY```A5DY>3G4_J
- MX````````#_P````````3G%.5O_T2.<?("8N`!0N+@`()&X`#'P`+PHO+@`0?
- M3KD``"7T(!]83RH`($,@*``,($.0J``$L(5L```2($,@*``,($.0J``$8```O
- M!"`%*``O!"!#("@`&B!#T*@`!"\`+P=.N0``)&C>_``,W(2:A-Z$($/9J``4>
- M($/9J``$($,@*``(($.PJ``$;```#"!#(D,C:``$``@@0P`H``$`&$J%9P``+
- M)B\#3KD``"5(6$\H``R$_____V8```P@!$S?!/A.7DYU8```!F````9@`/]:8
- M+P-.N0``)4A83R\*+P9.N0``)F8@'UA/8-).<4CGP,`@.0````QF```^0_D`9
- M``K,<``L>0````1.KOW8(\`````,9@``(DCG`08N/``#@`4L>``$3J[_E$S?!
- M8(!(>`!D3KD``"'^+$!,WP,#3G5(YS`"3KD``"!L3-@`#$ZN_[),WT`,3G5(=
- MYS`"3KD``"!L3-@`#$ZN_ZQ,WT`,3G5(YS`"3KD``"!L3-@`#$ZN_[Y,WT`,1
- M3G5(YS`"3KD``"!L3-@`#$ZN_[A,WT`,3G4O#DZY```@;$ZN_\0L7TYU2.<P0
- M`DZY```@;$S8``Q.KO_63-]`#$J`9@1P`&`(:P1P`6`"</].=2\.3KD``"!L=
- M3J[_W"Q?3G4O#DZY```@;$ZN_^(L7TYU0H%.=4*!3G5.<4Y6```O"D7Y```DJ
- ML$*Y```-B$AX`H!(>0``"PA.N0``)2Q03TAX`0`O.0```!A"ITZ2WOP`#$AX]
- M`0`O.0```!Q(>``!3I+>_``,2'@!`"\Y````($AX``).DM[\``PO+@`,+RX`C
- M"$ZY```"A%!/0J=.N0``(?Y83R1?3EY.=4Y6__Q(YQ`P1?D```V(1_D``"-P0
- M2'D```L(3I-83T'Y```+""`(!H`````@+P!.DUA/0?D```L((`@&@````$`O8
- M`$Z36$\@$F<``!H@4B80(%(O*``(+Q).N0```#A03R2#8.(O+@`(3KD```'$M
- M6$],WPP(3EY.=4YQ3E;__$CG&"!%^0``#8@H+@`(0J<@!`:`````$"\`3KD`D
- M```@4$\F`"`29P``""!2(4,`!"!#()(@0R%*``0@!`:`````$"!#(4``""2#T
- M(`,&@`````Q,WP083EY.=4Y6__A(YQ@`+RX`#"\N``A.N0``)?0@'UA/*``OX
- M!$ZY```B>%A/)@`O!"\#3KD``"4L4$\@`TS?`!A.7DYU3E;_]$CG'@`H+@`(E
- M+RX`#$ZY```B>%A/)@!G```T(`0$@````!`L`"!&("@`"`2`````$"H`+P4OM
- M`R\$3KD``"1HWOP`#"\$3KD``"/46$\@`TS?`'A.7DYU3G%.5O_\2.<8`"8NU
- M``@O`TZY```E2%A/0J<@0R`H`!0@0Y"H`!`O`"!#*!`O!$ZY````;-[\``P@>
- M0R\H``P@0R\H`!I.N0```#A03TAX`"`O`TZY```E+%!/(`1,WP`83EY.=4YQV
- M3E;__$CG&``H+@`(9P``2G#T0?D```KD(@@$@0``"N0D!)2!(@+0@28`($,B[
- M0R)I``0BD"!#(!!G```.($,B0R)1(V@`!``$($,O*``(+P-.N0```#A03TS?7
- M`!A.7DYU3E;__$CG$"!%^0``#8@@$F<``!H@4B80(%(O*``(+Q).N0```#A04
- M3R2#8.),WP0(3EY.=4Y6```O+@`0+RX`""\N``Q.N0``*'3>_``,3EY.=4YQT
- M(&\`!")O``@0V6;\("\`!$YU3G$@;P`$2AAF_)'O``13B"`(3G5.<4Y6__Q(3
- MYQ@`*"X`$&8```1X`4'Y```+""`((BX`".N!T($F`&<``%)"IR!#(40`#"\H%
- M``Q.N0```"!03R!#(4``&B`H`!IG```P0J="IR!#(*X`#"\03KD```!LWOP`$
- M#"!#(4``%")#(V@`%``0(`-,WP`83EY.=7``8/1.5@``+RX`#$*G+RX`"$ZYS
- M```H1-[\``Q.7DYU3E;_]$CG'B`F+@`(-'P`$'P`($,0*``82(!(P`*`````B
- M`6<``'(@0R`H`!0@0Y"H``0J`"`R.`"PA6<``!I"IR`%D+(X`"\`($,O$$ZY"
- M````;-[\``P@0R\H``0@0R\H`!H@0R\03KD````PWOP`#"@`($.XJ``$9P``Y
- M#'S_2H1L```$>``@!="$)8`X`"!#`BC__@`8($-"J``(($-"J``$(`9,WP1XH
- M3EY.=4Y6``!(Y_@`2FX`"&8``!Y*;@`,9@``%C`N``K`[@`.+4``"$S?`!].O
- M7DYU>`$D+@`(;```!D2"1(0F+@`,;```!D2#1(1"@#`"P,,R`DA"Q,-(0\+#A
- MTH)(04)!T(%*A&P```1$@"U```A,WP`?3EY.=4Y6```O`$IN``QF'"`N``AK[
- M%H#N``YI$`*```#__RU```@@'TY>3G5(YWP`>@$@+@`(;`1$@$2%)@`B+@`,I
- M;`1$@42%*`$,@0`!``!L%$)`2$"`P30`,`.`P4A`,`)(0&`JXHCBB0R!``$`7
- M`&ST@,$"@```__\D`"\`+P1A`/\0(!]83[:`;`)3@B`"2H5L`D2`+4``"$S?Y
- M`#X@'TY>3G5.5@``2.?X`$IN``QF'"`N``AK%H#N``YI$$)`2$`M0``(3-\`S
- M'TY>3G5X`2`N``AL!$2`1(0D`"(N``QL`D2!#($``0``;!!"0$A`@,$P`H#!4
- M0D!(0&`L)@'BB.*)#($``0``;/2`P0*```#__R\`+P-A`/YZ(!]83[2`9`*0+
- M@Y""1(!*A&P"1(`M0``(3-\`'TY>3G4@7R)8(@EG!K"89O9.T2!03M!.<4Y6,
- M__Q(YQ@`*"X`"&<``$IP]$'Y```*^"((!($```KX)`24@2("T($F`"!#(D,BD
- M:0`$(I`@0R`09P``#B!#(D,B42-H``0`!"!#+R@`""\#3KD````X4$],WP`8*
- M3EY.=4Y6__Q(YQ`@1?D```V((!)G```:(%(F$"!2+R@`""\23KD````X4$\DO
- M@V#B3-\$"$Y>3G5.5O_T2.<>`"HN``@L!2@N``PF+@`02H-O```,($92AA"$`
- M4X-@\"`%3-\`>$Y>3G5.5O_T2.<?`"PN`!`N+@`(2H9N```,(`=,WP#X3EY.>
- M=2HN``PH![J$;@``."`&4X`B!=*`(`&PA&T``"@@!E.`VH`@!E.`V(`F!DJ#E
- M;P``$"!%4X4B1%.$$I!3@V#L8```&"8&2H-O```0($52A2)$4H02D%.#8.P@)
- M!V"<```#[````&L````!```H&@``)\0``"?,```DQ```)#X``"/H```C\```F
- M(H(``"'0```AO```(:H``"&8```B%```(AX``"(R```AC@``(@@``"!R```@+
- MC@``('P``!V(```1!@``$;0``!)^```3(@``$S0``!5J```6;@``%H```!@T<
- M```82```&'(``!B*```8D@``&,H``!CR```9'@``'20``!UL```0!@``#C@`_
- M``Y0```/C```#^0```V4```-G@``#;(```ND```+Q@``"^(```P6```,+```^
- M#&````.Z```$N@```IX```-*```#4````^H```0Z```$;```!)H```2J```$2
- MV```!.(```62```%O@``!<P```7D```)&````6`````"````"`````X````:&
- M````1@```$P```!>````9````-X```#N````_````0(```$.```!%````1H`>
- M``$@```!+@```3X```%0```!=````88```&,```!D@```9@```&>```!I```9
- M`<H```'2```!V@```>0```'R```"`````@X```(<```"*````FX```#H````#
- M`@``)3P``"1Z```CP@``(X```"->```C4@``(P0``"+H```B]@``(R8``")H;
- M```B#@``(>@``"&>```AB```(?(``""R```@Q```(-P``"#T```A#```(2(`J
- M`"$T```A6@``(6H``"!@```@*```(%0``!_B```?G@``'R0``!]4```?!@``P
- M'L@``!]F```>N@``'N(``!\2```?0@``'UX``!U6```=J@``&.@``!RB```=G
- M1@``'9H``!->```4S```%JH``!,\```6B```H``!D6```2X```%<P``!+,M
- M```3O```%;@``!<(```2H```$XX``!42```5C```%MH``!)L```3`@``$[``<
- M`!58```5[@``%OP``!)(```2O@``$V@``!4T```5J@``%K0``!(J```4:@``S
- M%YH``!($```3]```%$(``!20```4K@``%/0``!=````7@@``%\X``!?L```1[
- MJ```%E@``!&8```6/```$28``!FN```:T@``$2H``!$R```1.@``$48``!%,X
- M```17```$68``!%P```1\@``$HX``!-,```3?```$^(``!0P```4?@``%)P`Q
- M`!2Z```4X@``%0```!5Z```6F```%L@``!<N```7<```%[P``!?:```8!@``B
- M&"8``!E.```9;@``&9```!FR```9O@``&M8``!K>```:Y@``&NX``!KV```:1
- M_@``&P8``!L.```;%@``&QX``!LF```;+@``&SH``!N4```;N```&]P``!P:`
- M```<F```'+P``!T,```=-@``'7X``!#B```0U@``$(@``!!Z```0J@``$&P`3
- M``_:```/R```#UP```^\```-_```#<X```OR```+=```"XH```IX```*)@``=
- M"=(```G<```)A```"F0```?N```&]```""````@Z```*5@``!-````1````'3
- M_@``",@```.4```"R@```I@```*2```"I````LX```+6```"X@```SP```.,?
- M```#T````]8```/R```$#@``!"X```1V```$H@``!+````6:```%Q```!=(`X
- M``7J```',```!W````>R```'T```!^0```D&```)'@``"2@```E"```)7```O
- M"AX```KL```*]@``"OH```K^```+`@``"P8```L*```+%```"R````LL```+I
- M.```"T0```M0```+7```"VX```N$```!)@```;P````6`````P``);```"66>
- M```E"```(YX```]&```.R```#R@```ZR```.W```#=H```>\```'9```!WH`0
- M``6J```%8@``"*````4L```'&@``!0H```<Z```!"````/8````7````!```Z
- M*`(``"@R```DY@``)"8``"16```CM```(I@``")8```0'```#PP```WN```*I
- ML```"I@```JF```*C@``!7P```8````(M```"-8```5&```(B@``!.@```-")
- M`````0````4```Q4`````````_(```/I````1DCG(`),[P`&``PL>0````A.F
- MKO_B3-]`!$YU```O#B(O``@L>0````A.KO_<+%].=4CG,`),[P`.`!`L>0``(
- M``A.KO_03-]`#$YU```O#BQY````"$ZN_\HL7TYU+PXL>0````A.KO_$+%].,
- M=4CG,`),[P`.`!`L>0````A.KO^^3-]`#$YU``!(YR`"3.\`!@`,+'D````(:
- M3J[_K$S?0`1.=0``+PXB+P`(+'D````(3J[_IBQ?3G5(YR`"3.\`!@`,+'D`.
- M```(3J[_FDS?0`1.=0``2.<@`DSO``8`#"QY````"$ZN_Y1,WT`$3G4``"\.8
- M(B\`""QY````"$ZN_X(L7TYU+PXB+P`(+'D````(3J[_+BQ?3G4```/L````Z
- M#`````$```$,````^````.````#$````K````)0```!X````8````%`````\:
- M````)`````P````````#\`````-?4&%R96YT1&ER`"4```$$`````U]#=7)RV
- M96YT1&ER`````/`````"7T5X3F5X=`````#4`````E]%>&%M:6YE````N```'
- M``)?56Y,;V-K`````*0````"7TQO8VL`)>D```"(`````E]3965K`"7I````(
- M;`````)?3W5T<'5T`````%P````"7TEN<'5T`"4```!,`````E]7<FET90`EM
- M````,`````)?0VQO<V4`)0```!P````"7T]P96X`)>D``````````````_(`^
- M``/I````)"\.+'D````$3J[_?"Q?3G4O#BQY````!$ZN_W8L7TYU+PXL>0``"
- M``1,[P`#``A.KO\Z+%].=0``+PXL>0````0B;P`(("\`#$ZN_RXL7TYU+PXL'
- M>0````0B+P`(3J[_*"Q?3G4O#BQY````!")O``A.KOYB+%].=2\.+'D````$6
- M(F\`""`O``Q.KOW8+%].=0```^P````'`````0```'P```!H````5````#P`^
- M```D````%`````0````````#\`````-?3W!E;DQI8G)A<GD```!X````!%]#6
- M;&]S94QI8G)A<GD`)>D```!D`````U]!=F%I;$UE;0`EZ0```%`````"7T9R?
- M965-96T````X`````U]!;&QO8TUE;0`EZ0```"`````"7U!E<FUI=``````0=
- M`````E]&;W)B:60```````````````/R```#Z0````U(YS`R+'D```'`(&\`K
- M&")O`!PD;P`@)F\`)"`O`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU```#[```$
- M``$````!````!@````````/P`````U]!=71O4F5Q=65S=``````````````#B
- !\@$`S
- ``
- end
- size 16696
- SHAR_EOF
- # End of shell archive
- exit 0
- --
- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page
- Have five nice days.
-